package com.roads.agency.mapper;

import com.roads.agency.domain.AgencyPeriod;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 代建工期Mapper接口
 * 
 * @author nhp
 * @date 2023-08-09
 */
public interface AgencyPeriodMapper {

    /**
     * 根据主键ID查询详情
     *
     * @param id 代建工期主键
     * @return 代建工期
     */
    AgencyPeriod getModelById(Long id);

    /**
     * 根据标段编号和工期名称获取工期详情
     *
     * @param institutionCode 标段编号
     * @param periodName 工期
     * @return 工期详情
     */
    AgencyPeriod getPeriodByPeriodName(@Param("institutionCode")String institutionCode, @Param("periodName") String periodName);

    /**
     * 根据工期查询详情
     *
     * @param institutionCode 标段编号
     * @param periodName 工期
     * @return 工期
     */
    AgencyPeriod getModelByPeriodName(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 获取最后一期
     *
     * @param institutionCode 标段编码
     * @return 最后一期
     */
    AgencyPeriod getLastPeriod(String institutionCode);

    /**
     * 根据工期，模板，机构编号获取上一期
     *
     * @param institutionCode 标段编号
     * @param templateCode 模板编号
     * @param periodId 工期ID
     * @return 上一期
     */
    AgencyPeriod getUpperPeriodByTemplate(@Param("institutionCode")String institutionCode, @Param("templateCode")String templateCode, @Param("periodId")Long periodId);

    /**
     * 获取当前计量期次
     *
     * @param institutionCode 标段编号
     * @return 当前计量期次
     */
    AgencyPeriod getCurrentPeriod(String institutionCode);

    /**
     * 查询列表
     * 
     * @param model 代建工期
     * @return 代建工期集合
     */
    List<AgencyPeriod> selectModelList(AgencyPeriod model);

    /**
     * 获取比当前工期大的工期
     *
     * @param institutionCode 标段编码
     * @param periodId 工期ID
     * @return 工期集合
     */
    List<AgencyPeriod> selectBigPeriodList(@Param("institutionCode") String institutionCode, @Param("periodId") Long periodId);

    /**
     * 新增
     * 
     * @param model 代建工期
     * @return 结果
     */
    int insert(AgencyPeriod model);

    /**
     * 批量新增工期
     *
     * @param list 数据集合
     */
    void insertBatch(List<AgencyPeriod> list);

    /**
     * 修改
     * 
     * @param model 代建工期
     * @return 结果
     */
    int update(AgencyPeriod model);

    /**
     * 批量修改工期
     *
     * @param list 数据集合
     */
    void updateBatch(List<AgencyPeriod> list);

    /**
     * 设置当前计量期次
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int updateCurrentMeteragePeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 设置除本期外所有期次为非当前计量期次
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int updateNotCurrentMeteragePeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 锁定工期
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int lockPeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 解锁工期
     *
     * @param institutionCode 标段编号
     * @param periodName 期次
     * @return 结果
     */
    int unlockPeriod(@Param("institutionCode")String institutionCode,@Param("periodName") String periodName);

    /**
     * 删除
     * 
     * @param id 代建工期主键
     * @return 结果
     */
    int delete(Long id);

    /**
     * 批量删除
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteByIds(Long[] ids);

    /**
     * 根据标段编号删除工期
     *
     * @param institutionCode 标段编号
     */
    void deleteByInstitutionCode(@Param("institutionCode")String institutionCode);

}
